perm filename PLAY.FAI[MUS,LCS]5 blob sn#197666 filedate 1976-01-22 generic text, type T, neo UTF8
00100		TITLE	SOUND;  DOROTHY BENDER MEMORIAL TITLE 1969,69,69, 1975(LCS)*******
00200	
00300	;  ROUTINE TO READ THE OUTPUT FROM THE MUSIC
00400	;  PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
00500	;  
00600	;  NAME OF THE FILE TO BE INPUTTED IS 'MUSIC.MUS' OR 'MUSAA.DMD',
00700	;  THE FIRST RECORD OF WHICH CONTAINS THE
00800	;  NUMBER OF WORDS OF DATA IN THE ENTIRE DISK FILE.
00900	
01000	A   ←   1     ;WORK
01100	B   ←   2     ;WORK
01200	RET ←   3     ;RETURN ACCUMULATOR
01300	T1  ←   4     ; TEMP FOR ADSMAP (JAM)
01400	;;BUFSIZ ←=20224   ;****** DOUBLE THIS FOR 4-CHANNEL SOUND!!!!!	
01500	BUFSIZ ←4400*6	;OPTIMIZED FOR 3330 DSK. (←4400*3 IN SYS VERSION)
01600	↓DSKCHN ←1             ;DISK CHANNEL FOR INPUT
01700	↓ADCHN  ←2             ;D-A CHANNEL FOR OUTPUT
01800	
01900		OPDEF	READCH [51B8]
02000	        OPDEF   MESSAGE[51B8!3B12]
02100	
02200	BEG:	CALLI	0,0         ;RESET I/O DEVICES
02300	 	OPEN 	DSKCHN,[17  ;MODE
02400			'DSK   '    ;DEVICE NAME
02500	 		0]          ;NO BUFFER HEADERS
02600		HALT	BEG         ;RESTART IF DEVICE IS UNAVAILABLE
02700	
02800		MOVE 6,['MUSAA ']
02900		MOVE 7,['DMD   ']
03000	 	SETZM	DIR2+3    ;FOR RESTART
03100	 	SETZM	DIR+3    ;FOR RESTART
03200		OUTSTR[ASCIZ/FILE NAME -- /]  ;READS '.DMD' FILES ONLY.
03300		SETZM DIR+1
03400		SETZM DIR
03500		SETO 5,		;FLAG FOR EXTENSIONS
03600		MOVE  2,[POINT 6,DIR]
03700		JRST GOT
03800	EXT:	MOVE 2,[POINT 6,DIR+1]
03900		SETZ 5,
04000	GOT:	INCHWL	1
04100		CAIN  1,15	; A CR?
04200		JRST  GOT
04300		CAIGE	1,60		; CHECKS FOR GOOD CHARS.
04400		JRST	LX  
04500		SUBI	1,40
04600		IDPB	1,2
04700		JRST	GOT
04800	LX:	JUMPE 5,LZ
04900		SKIPN DIR
05000		MOVEM 6,DIR
05100		CAIN  1,56 	; 56='.'
05200		JRST EXT
05300		JRST MESS
05400	LZ:	SKIPN DIR+1
05500		MOVEM 7,DIR+1
05600		;FIND OUT NUMBER OF CHANNELS AND THE SPEED.
05700	MESS:	MESSAGE	[ASCIZ/  HOW MANY CHANNELS? /]
05800		READCH	A
05900		SUBI	A,"0"		;CONVERT TO BINR
06000		DPB	A,[POINT 2,DACPAR,35]
06100	
06200	SPD:	MESSAGE [ASCIZ/  SPEED? /]
06300		READCH  A
06400		CAIG A,"5"		;IS IT 1 - 5?
06500		JRST SPD2		;YES
06600		SKIPN DIR+3		;IS THIS THE 1ST TIME THRU?
06700		JRST SPD		;YES, SO WE NEED A GOOD NUM.
06800		JRST PLA2 		;ANYTHING ELSE WILL REPLAY
06900	
07000	SPD2:	SUBI	A,"0"
07100		DPB	A,[POINT 3,DACPAR,26]
07200	
07300	PLA2:	SETZM DIR+3
07400		SETZM DIR2+3
07500		MOVE 5,DMD		;GET 'DMD   '
07600		LOOKUP	DSKCHN,DIR   
07700		SKIPA			;CAN'T FIND MUSAA.DMD
07800		JRST XOPEN		;FOUND IT
07900		CAMN 5,DIR+1		;IS DIR+1='DMD   '?
08000		JRST MUS		;YES, GO LOOK FOR MUSIC.MUS
08100		MOVEM 5,DIR+1
08200		JRST PLA2		;TRY IT WITH 'DMD   '
08300	MUS:	LOOKUP  DSKCHN,DIR2	;TRY FOR MUSIC.MUS
08400	
08500		JRST	[MESSAGE[ASCIZ/
08600			*** MUSIC FILE NOT FOUND/]
08700			CALLI  12]
08800	        ;EXIT IF FILE IS MISSING
08900		MOVE A,DIR2+3	;GET LENGTH OF MUSIC.MUS
09000		MOVEM A,DIR+3;PUT IT IN RIGHT PLACE
09100	
09200	XOPEN:	OPEN	ADCHN,[117 	;MODE
09300	         	'DAC   '        ;DEVICE NAME
09400	 		0]              ;NO BUFFER HEADERS
09500	
09600	  	JRST	[MESSAGE[ASCIZ/
09700			***D-A NOT AVAILABLE/]
09800			CALLI  12]
09900		;EXIT IF D-A IS UNAVAILABLE
10000		MTAPE ADCHN,DACPAR
10100	
10200	XGPOK:	MOVSI	'XGP'	;DOWN TO SPWAR FOR XGP CONFLICT.
10300		DEVUSE	0,	
10400		HLRZ 	0,0
10500		CAIN	400000
10600		JRST	SPWAR
10700		INIT	16,17
10800		SIXBIT	.XGP.
10900		0
11000		JRA	16,2(16)
11100	SPWAR:	LOCK A,
11200	;;	SPCWAR 17,[CALLI]
11300		MESSAGE [ASCIZ/ GO? /]
11400		READCH A
11420		; READS TO FIND (AND IGNORE) HEADER.(1ST REC.)
11440		INPUT DSKCHN,HEADER
11450		HRRZ A,BUF1
11460		CAIE A,525252	; LOOKS FOR MAGIC NUMBER.
11470		USETI DSKCHN,1	; NO HEADER, SO START AT BEGINNING.
11500	
11600	
11700	LNTH:	movs a,DIR+3		;get length of file.
11800		movnm a,nwd
11900	;-----------------------------------------------------
12000	
12100		;BEGIN MAIN BODY OF PROGRAM
12200	
12300		MOVE T1,[647003,,0]
12400		ADSMAP T1,	; SET AUDIO SWITCH TEMPORARILY TO DAC (JAM 7/24/75)
12500				; THE OPTIONS WE ASKED FOR ARE TEMPORARY, WAIT FOR
12600				; PAGE TO FINISH, DON'T INTERRUPT WITH MORE PAGES,
12700				; DELAY BEEPS TO END OF XFR.
12800		OUTSTR [ASCIZ /
12900	TO DAC . . ./]
13000	LOOP:	JSP	RET,SUB		;ROUTINE TO READ AND WRITE
13100		BUF1-1 			;USE BUF1 FOR THE I/O
13200		JUMPLE	B,OUT    	;DONE
13300		
13400		JSP RET,SUB
13500		BUF2-1
13600		JUMPLE B,OUT
13700	
13800		JSP	RET,SUB		;CALL IT AGAIN
13900		BUF3-1			;USE BUF3 FOR THE I/O
14000		JUMPG	B,LOOP		;GO BACK FOR MORE IF B>0
14100	
14200	OUT:	close dskchn,		;END OF PROGRAM.
14300		releas adchn,
14400		OUTSTR [ASCIZ / DONE!
14500	/]
14600		SETO T1,
14700		ADSMAP T1,	; RESET AUDIO SWITCH CONNECTION TO PERMANENT (JAM 7/24/75)
14800	;;	SPCWAR 0,'SSW'
14900		UNLOCK
15000		RELEASE 16,
15100		jrst SPD
15200	
15300		;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
15400		;  1(RET) WILL BE THE RETURN
15500		;  0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
15600		;         PUT IN THE RIGHT HALF OF THE IOWD.
15700		;  A      WILL BE A WORK REGISTER
15800	    	;  B      WILL BE TESTED ON THE OUTSIDE.
15900	
16000	SUB:	MOVNI	A,BUFSIZ	;PICK UP AND COMPLEMENT BUFSIZ
16100		ADDB	A,NWD		;A←NWD-BUFSIZ
16200					;NWD←NWD-BUFSIZ
16300		MOVE	B,A		;SAVE B TO BE TESTED FOR LAST
16400					;TIME.
16500		JUMPL	A,LAST		;SET UP FOR LAST TIME.
16600		MOVEI	A,0		
16700	
16800		;THE IOWD LOOKS LIKE:
16900		;  [-BUFSIZ / BUFI-1]
17000	
17100	LAST:	ADDI	A,BUFSIZ
17200		MOVNS	A		;COMPLEMENT A
17300		HRL	A,0(RET)	;PICK UP BUFI AND MOVE IT
17400					;TO THE LEFT SIDE OF A.
17500		MOVSM	A,INLIST	;SWAP A AND MOVE IT.
17600		MOVSM	A,OUTWC		;SAME FOR OUTPUT.
17700		INPUT	DSKCHN,INLIST	;READ A RECORD.
17800		OUTPUT	ADCHN,OUTWC	;WRITE THE RECORD.
17900		JRST	1(RET)		;RETURN
18000	;---------------------------------------------------------
18100	
18200	; STORAGE:
18300	
18400	NWD:	0			;FOR NUMBER OF WORDS OF INPUT.
18500	↓BUF1:	BLOCK	BUFSIZ+1	;BUFFER 1
18600	BUF2:	BLOCK	BUFSIZ+1	;BUFFER 2
18700	BUF3:	BLOCK	BUFSIZ+1	;BUFFER 3
18800	
18900	DMD:	'DMD   '
19000	DIR2: 'MUSIC '		;FILENAME FOR INPUT
19100		'MUS   '			;EXTENSION
19200		0			;INFORMATION ON FILE
19300		0			;PROJECT PROG#
19400	DIR:	0    			;NAME
19500		0			;EXTENSION
19600		0			;INFORMATION ON FILE
19700		0			;PROJECT PROG#
19800	CLIST:	IOWD	1,NWD		;FOR THE FIRST RECORD
19900		0
20000	INLIST:	0			;WILL CONTAIN AN IOWD
20100		0
20110	HEADER:	IOWD =128,BUF1
20120		0
20200	OUTWC:	0			;WILL CONTAIN AN IOWD FOR D-A
20300	;;	3650			;MAGIC BITS FOR 136.
20400	OUTBIT: 4000			;BITS FOR D-A
20500		BLOCK	2
20600	DACPAR:	1001		;SPEED 0=6.4K, 1=12.8, 2=25.6, 3=51.2, 4=102.4, 5=
20700		0
20800		0
20900	
21000	
21100	A←1
21200	B←2
21300	D←3
21400	
21500	ichn←adchn
21600	
21700	END BEG